const app = getApp()
const tokenManager = require('../../utils/tokenManager')

Page({
  data: {
    // 表单数据
    formData: {
      interested_industries: [],
      favorite_companies: [],
      favorite_products: [],
      interests_hobbies: [],
      personality_tags: [],
      work_style: [],
      cultural_fit_preferences: []
    },
    // 选中状态映射表
    selectedMap: {},
    // 标签数据
    industryTags: ['互联网', '金融', '教育', '医疗', '房地产', '制造业', '零售', '文化娱乐', '物联网', '其他'],
    companyTags: ['腾讯', '阿里巴巴', '百度', '字节跳动', '美团', '京东', '华为', '小米', '其他'],
    productTags: ['微信', '支付宝', '抖音', '淘宝', '美团', '京东', '其他'],
    interestsTags: ['阅读', '运动', '音乐', '旅行', '摄影', '绘画', '写作', '编程', '游戏', '电影', '美食', '手工', '园艺', '宠物', '其他'],
    personalityTags: ['开朗', '稳重', '细心', '创新', '团队', '独立', '耐心', '乐观', '严谨', '灵活', '负责', '进取', '沟通', '领导', '其他'],
    workStyleTags: ['高效', '创新', '团队', '独立', '灵活', '严谨', '负责', '进取', '沟通', '领导', '其他'],
    culturalFitTags: ['开放', '包容', '创新', '传统', '团队', '独立', '灵活', '严谨', '进取', '其他'],
    // 表单状态
    formStatus: {
      loading: false,
      submitEnabled: true
    }
  },

  onLoad() {
    console.log('页面加载');
    // 初始化空的表单数据
    this.resetFormData();
  },

  onShow() {
    console.log('页面显示');
    // 加载个性化数据
    this.loadPersonality();
  },

  // 重置表单数据为空
  resetFormData() {
    console.log('重置表单数据');
    const emptyFormData = {
      interested_industries: [],
      favorite_companies: [],
      favorite_products: [],
      interests_hobbies: [],
      personality_tags: [],
      work_style: [],
      cultural_fit_preferences: []
    };

    this.setData({
      formData: emptyFormData,
      selectedMap: {} // 清空选中状态
    });
  },

  // 加载已有的个性化数据
  async loadPersonality() {
    try {
      const token = tokenManager.getAccessToken();
      if (!token) {
        console.error('未登录，无法获取个性化数据');
        return;
      }

      console.log('开始加载个性化数据');
      const res = await app.api.personality.getPersonality(token);
      console.log('获取到的数据:', res);
      
      if (res.code !== 200 || !res.data) {
        console.log('无有效数据，保持空状态');
        return;
      }
      
      // 处理API返回的数据
      const formData = this.processApiData(res.data);
      
      // 生成选中状态映射
      const selectedMap = this.generateSelectedMap(formData);
      
      // 更新数据和选中状态
      this.setData({
        formData: formData,
        selectedMap: selectedMap
      }, () => {
        console.log('数据加载完成:', this.data.formData);
        console.log('选中状态映射:', this.data.selectedMap);
      });
    } catch (error) {
      console.error('加载数据失败:', error);
    }
  },
  
  // 处理API返回的数据
  processApiData(apiData) {
    const processedData = {};
    const arrayFields = [
      'interested_industries',
      'favorite_companies',
      'favorite_products',
      'interests_hobbies',
      'personality_tags',
      'work_style',
      'cultural_fit_preferences'
    ];
    
    // 处理每个字段
    arrayFields.forEach(field => {
      let fieldData = apiData[field];
      
      // 如果是字符串，尝试解析JSON
      if (typeof fieldData === 'string' && fieldData && fieldData.trim() !== '') {
        try {
          fieldData = JSON.parse(fieldData);
        } catch (e) {
          console.error(`解析${field}失败:`, e);
          fieldData = [];
        }
      }
      
      // 确保是数组
      processedData[field] = Array.isArray(fieldData) ? fieldData : [];
    });
    
    return processedData;
  },
  
  // 根据表单数据生成选中状态映射
  generateSelectedMap(formData) {
    const selectedMap = {};
    
    Object.keys(formData).forEach(field => {
      if (Array.isArray(formData[field])) {
        formData[field].forEach(item => {
          // 为每个已选项生成唯一key
          const key = `${field}_${item}`;
          selectedMap[key] = true;
        });
      }
    });
    
    return selectedMap;
  },

  // 切换标签选中状态
  toggleTag: function(e) {
    console.log('Toggle tag called', e);
    const dataset = e.currentTarget.dataset;
    const tagType = dataset.type;
    const tagValue = dataset.item;
    
    // 确保formData存在
    if (!this.data.formData) {
      this.initFormData();
    }
    
    // 获取当前数组
    const formData = this.data.formData;
    const currentArray = formData[tagType] || [];
    
    // 切换标签状态
    let newArray;
    if (currentArray.includes(tagValue)) {
      // 如果已选中，则移除
      newArray = currentArray.filter(item => item !== tagValue);
    } else {
      // 如果未选中，则添加
      newArray = [...currentArray, tagValue];
    }
    
    // 更新formData
    formData[tagType] = newArray;
    
    console.log(`Updated ${tagType}:`, newArray);
    
    // 更新selectedMap
    const selectedMap = this.data.selectedMap || {};
    const key = `${tagType}_${tagValue}`;
    
    if (currentArray.includes(tagValue)) {
      // 如果之前已选中，现在取消选中
      selectedMap[key] = false;
    } else {
      // 如果之前未选中，现在选中
      selectedMap[key] = true;
    }
    
    // 更新数据
    this.setData({
      formData: formData,
      selectedMap: selectedMap
    });
  },

  // 表单验证
  validateForm() {
    const { formData } = this.data;
    
    if (!formData) {
      wx.showToast({
        title: '表单数据无效',
        icon: 'none'
      });
      return false;
    }

    // 检查性格标签
    if (!Array.isArray(formData.personality_tags) || formData.personality_tags.length === 0) {
      wx.showToast({
        title: '请选择性格标签',
        icon: 'none'
      });
      return false;
    }

    // 检查工作风格
    if (!Array.isArray(formData.work_style) || formData.work_style.length === 0) {
      wx.showToast({
        title: '请选择工作风格',
        icon: 'none'
      });
      return false;
    }

    return true;
  },

  // 获取字段名称
  getFieldName(field) {
    const fieldNames = {
      interested_industries: '感兴趣行业',
      favorite_companies: '收藏企业',
      favorite_products: '感兴趣产品',
      interests_hobbies: '兴趣爱好',
      personality_tags: '性格标签',
      work_style: '工作风格',
      cultural_fit_preferences: '企业文化偏好'
    };
    return fieldNames[field] || field;
  },

  // 提交表单
  async submitForm() {
    if (!this.validateForm()) {
      return;
    }

    this.setData({
      'formStatus.loading': true,
      'formStatus.submitEnabled': false
    });

    try {
      const token = tokenManager.getAccessToken();
      if (!token) {
        throw new Error('未登录');
      }

      // 准备提交数据
      const submitData = {};
      
      // 确保所有数组字段都是JSON字符串
      Object.keys(this.data.formData).forEach(field => {
        const fieldData = this.data.formData[field];
        submitData[field] = Array.isArray(fieldData) ? JSON.stringify(fieldData) : JSON.stringify([]);
      });

      const res = await app.api.personality.updatePersonality(token, submitData);
      
      if (res.code === 200) {
        wx.showToast({
          title: '保存成功',
          icon: 'success'
        });
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
      } else {
        throw new Error(res.message || '保存失败');
      }
    } catch (error) {
      console.error('保存个性化数据失败:', error);
      wx.showToast({
        title: error.message || '保存失败',
        icon: 'none'
      });
    } finally {
      this.setData({
        'formStatus.loading': false,
        'formStatus.submitEnabled': true
      });
    }
  },
  
  // 表单提交(处理form的bindsubmit事件)
  handleSubmit(e) {
    console.log('表单提交:', e);
    this.submitForm();
  }
}); 